// 认证中间件
import jwt from 'jsonwebtoken';

/**
 * 认证中间件函数
 * 验证用户请求中的JWT令牌，确保用户已登录
 * @param {Object} request - Fastify请求对象
 * @param {Object} reply - Fastify响应对象
 * @returns {Object|null} 如果认证失败则返回错误响应，否则无返回值
 */
async function authenticate(request, reply) {
  try {
    // 从Authorization头部获取令牌
    const authHeader = request.headers.authorization;
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return reply.code(401).send({
        code: 401,
        success: false,
        message: '用户未登录',
        data: {}
      });
    }
    
    // 提取令牌（移除'Bearer '前缀）
    const token = authHeader.substring(7);
    
    // 验证令牌
    const decoded = jwt.verify(token, process.env.JWT_SECRET || 'secret');
    
    // 将用户信息添加到请求对象中
    request.user = decoded;
  } catch (error) {
    return reply.code(401).send({
      code: 401,
      success: false,
      message: '无效的认证令牌',
      data: {}
    });
  }
}

export { authenticate };